def dfs(s):
    global count
    # 剪枝
    if s >= 4  and b[0]+b[1]+b[2]+b[3]     != 34: return  # 第一行
    if s >= 8  and b[4]+b[5]+b[6]+b[7]     != 34: return  # 第二行
    if s >= 12 and b[8]+b[9]+b[10]+b[11]   != 34: return  # 第三行
    if s >= 13 and b[0]+b[4]+b[8]+b[12]    != 34: return  # 第一列
    if s >= 13 and b[3]+b[6]+b[9]+b[12]    != 34: return  # 右上左下对角线
    if s >= 14 and b[1]+b[5]+b[9]+b[13]    != 34: return  # 第二列
    if s >= 15 and b[2]+b[6]+b[10]+b[14]   != 34: return  # 第三列
    if s >= 16 and b[0]+b[5]+b[10]+b[15]   != 34: return  # 左上右下对角线
    if s >= 16 and b[3]+b[7]+b[11]+b[15]   != 34: return  # 第四列
    if s >= 16 and b[12]+b[13]+b[14]+b[15] != 34: return  # 第四行
    # 停止条件
    if s == 16:
        count += 1
    # 遍历
    for i in range(1,16):
        if vis[i] == 0:
            b[s] = a[i]
            vis[i] = 1
            dfs(s+1)
            vis[i] = 0
# 主函数
count = 0
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
b = [0] * 16
b[0] = a[0]
vis = [0] * 16
vis[0] = 1
dfs(1)
print(count)
